package com.qf.controller;

import com.qf.pojo.Result;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.IncorrectCredentialsException;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.crypto.hash.Md5Hash;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;

@Controller
public class loginController {
    /**
     * 用户登录
     * @param username 页面输入的用户名
     * @param password  页面输入的密码
     * @param rememberMe  页面勾选的记住我
     * @return
     */
    public Result dologin(String username, String password , Boolean rememberMe){

//    1.对页面输入的密码加密
        password = new Md5Hash(password, username, 1024).toString();
        System.out.println("===密码密文：====" + password);
        //  2.将页面输入的用户名、密码封装成shiro需要的用户名密码对象
        UsernamePasswordToken token = new UsernamePasswordToken(username, password);
//    3.判断是否需要记住我，如果是，设置记住我选项
        if (rememberMe){
            token.setRememberMe(true);
        }
//    4.获取shiro框架的subject对象，当前登录用户对象
        Subject subject = SecurityUtils.getSubject();
        try {
//    5.调用当前登录对象的认证方法，将用户名、密码对象 传入，让shiro进行认证
//        当调用了这个Login方法的时候，shiro会自动执行自定义reaml类中的认证方法
            subject.login(token);
            //    6.捕获，如果有异常那麽返回给用户错误提示
        } catch (UnknownAccountException e) {
            return Result.error("用户名错误!");
        }
        catch (IncorrectCredentialsException e) {
            return Result.error("密码错误！");
        }
        catch (AuthenticationException e) {
            e.printStackTrace();
        }
    return null;
    }

}
